package com.zx.crowdfunding.service.api;

import java.util.List;
import java.util.Map;

import javax.servlet.ServletContext;

import org.springframework.security.core.GrantedAuthority;

import com.zx.crowdfunding.entity.Auth;

/**
 * 权限 - Service接口
 * @author 郑雪
 * @date 2021-12-09
 */
public interface AuthService {

	/**
	 * 查询全部
	 * @return Auth对象的List集合
	 */
	List<Auth> getAll();

	/**
	 * 添加权限
	 * @param auth 权限对象
	 */
	void saveAuth(Auth auth);
	
	/**
	 * 删除权限
	 * @param idList 权限id的List集合
	 */
	void removeAuth(List<Integer> idList);

	/**
	 * 根据id查询权限
	 * @param id 权限id
	 * @return Auth对象
	 */
	Auth getAuthById(Integer id);

	/**
	 * 修改权限
	 * @param auth 权限对象
	 */
	void editAuth(Auth auth);

	/**
	 * 查询角色已分配的权限
	 * @param roleId 角色id
	 * @return Auth对象的List集合
	 */
	List<Auth> getRoleAssignedAuth(Integer roleId);
	
	/**
	 * 根据管理员id查询已分配的权限代码集合
	 * @param adminId 管理员id
	 * @return 权限代码的List集合
	 */
	List<String> getAssignedAuthCodeByAdminId(Integer adminId);

	/**
	 * 查询菜单已分配的权限
	 * @param menuId 菜单id
	 * @return Auth对象的List集合
	 */
	List<Auth> getMenuAssignedAuth(Integer menuId);
	
	/**
	 * 查询操作已分配的权限
	 * @param operationId 操作id
	 * @return Auth对象的List集合
	 */
	List<Auth> getOperationAssignedAuth(Integer operationId);
	
	/**
	 * 查询全部资源权限
	 * @return Map对象的List集合<br> 
	 * 		key : resource 代表资源路径字符串<br>
	 * 		key : authorize 代表权限SPEL表达式字符串<br>
	 */
	List<Map<String, Object>> getAllResourceAuth();
	
	/**
	 * 查询全部代码权限
	 * @return Map对象的List集合<br>  
	 * 		key : code 代表代码字符串<br>
	 * 		key : authorize 代表权限SPEL表达式字符串<br>
	 */
	List<Map<String, Object>> getAllCodeAuth();
	
	/**
	 * 更新全局静态变量代码权限，同时更新application作用域中的代码权限
	 * @param servletContext Servlet上下文
	 */
	void updateGlobalCodeAuth(ServletContext servletContext);
	
	/**
	 * 根据管理员id获取授权列表
	 * @param adminId 管理员id
	 * @return GrantedAuthority对象的List集合
	 */
	List<GrantedAuthority> getGrantedAuthorityListByAdminId(Integer adminId);
}
